import Components from "unplugin-vue-components/webpack";
import NutUIResolver from "@nutui/auto-import-resolver";
import path from "path";
import { defineConfig } from "@tarojs/cli";
import { DefinePlugin } from "webpack";

function getIp() {
  const interfaces = require("os").networkInterfaces();
  for (const devName in interfaces) {
    const iface = interfaces[devName];
    for (let i = 0; i < iface.length; i++) {
      const alias = iface[i];
      if (
        alias.family === "IPv4" &&
        alias.address !== "127.0.0.1" &&
        !alias.internal
      ) {
        return alias.address;
      }
    }
  }
}

const config: ReturnType<typeof defineConfig> = {
  projectName: "xc-weapp",
  date: "2024-5-26",
  designWidth(input) {
    // if (input?.file?.replace(/\\+/g, '/').indexOf('@nutui') > -1) {
    //   return 375
    // }
    // return 750
    return 375;
  },
  deviceRatio: {
    640: 2.34 / 2,
    750: 1,
    828: 1.81 / 2,
    375: 2 / 1
  },

  sourceRoot: "src",
  outputRoot: "dist",
  defineConstants: {},
  copy: {
    patterns: [],
    options: {}
  },
  framework: "vue3",
  compiler: {
    type: "webpack5",
    prebundle: { enable: false }
  },
  sass: {
    resource: [path.resolve(__dirname, "..", "src/assets/custom_theme.scss")],
    data: `@import "@nutui/nutui-taro/dist/styles/variables.scss";`
  },
  alias: {
    "@/src": path.resolve(__dirname, "..", "src"),
    "@/utils": path.resolve(__dirname, "..", "src/utils"),
    "@/pages": path.resolve(__dirname, "..", "src/pages"),
    "@/components": path.resolve(__dirname, "..", "src/components"),
    "@/hooks": path.resolve(__dirname, "..", "src/hooks")
  },

  plugins: ["@tarojs/plugin-html"],

  mini: {
    miniCssExtractPluginOption: {
      ignoreOrder: true
    },
    webpackChain(chain) {
      chain.plugin("unplugin-vue-components").use(
        Components({
          resolvers: [
            NutUIResolver({
              importStyle: "sass",
              taro: true
            })
          ]
        })
      );

      console.log("ip:", getIp());
      chain.plugin("define").use(
        new DefinePlugin({
          __VUE_OPTIONS_API__: JSON.stringify(true),
          __VUE_PROD_DEVTOOLS__: JSON.stringify(false),
          __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false, // 添加缺失的特性标志
          TARO_APP_LOCAL_IP: getIp()
        })
      );
    },
    postcss: {
      pxtransform: {
        enable: true,
        config: {
          // selectorBlackList: ['nut-']
        }
      },
      url: {
        enable: true,
        config: {
          limit: 1024 // 设定转换尺寸上限
        }
      },
      cssModules: {
        enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
        config: {
          namingPattern: "module", // 转换模式，取值为 global/module
          generateScopedName: "[name]__[local]___[hash:base64:5]"
        }
      }
    }
  },
  h5: {
    webpackChain(chain) {
      chain.plugin("unplugin-vue-components").use(
        Components({
          resolvers: [
            NutUIResolver({
              importStyle: "sass",
              taro: true
            })
          ]
        })
      );
    },
    publicPath: "/",
    staticDirectory: "static",
    esnextModules: ["nutui-taro", "icons-vue-taro"],
    postcss: {
      autoprefixer: {
        enable: true,
        config: {}
      },
      cssModules: {
        enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
        config: {
          namingPattern: "module", // 转换模式，取值为 global/module
          generateScopedName: "[name]__[local]___[hash:base64:5]"
        }
      }
    }
  }
};

module.exports = function (merge) {
  if (process.env.NODE_ENV === "development") {
    return merge({}, config, require("./dev"));
  }
  return merge({}, config, require("./prod"));
};
